package controller

import (
	"fmt"
	"net/http"
	"text/template"

	"gitee.com/shuwenhe/shuwen/cart/dao"
	"gitee.com/shuwenhe/shuwen/cart/model"
	"gitee.com/shuwenhe/shuwen/cart/util"
)

func GetItems(w http.ResponseWriter, r *http.Request) {
	items, _ := dao.GetItems()
	t := template.Must(template.ParseFiles("view/page/manager/item_manager.html"))
	t.Execute(w, items)
}

func AddItem2Cart(w http.ResponseWriter, r *http.Request) { // 添加商品到购物车
	itemID := r.FormValue("itemID")
	item, _ := dao.GetItemByID(itemID) // 根据商品ID获取商品信息
	// _, session := dao.IsLogin(r)
	// userID := session.UserID // 获取用户ID
	userID := 1
	// cart, _ := dao.GetCartByUserID(userID) // 判断数据库中是否有当前用户的购物车
	cart, _ := dao.GetCartByUserID(userID) // 判断数据库中是否有当前用户的购物车
	fmt.Println("***购物车中还没有购物项***", cart)
	if cart != nil { // 当前用户已经有购物车，需要判断购物车中是否有该商品
		cartItem, _ := dao.GetCartItemByItemIDAndCartID(itemID, cart.CartID)
		if cartItem != nil { // 如果有这个商品count+1

		} else { // 如果没有这个商品，将这个购物项插入cart_item表
			cartItem := &model.CartItem{ // 创建购物车中的购物项
				Item:   item,
				Count:  1,
				CartID: cart.CartID,
			}
			cart.CartItems = append(cart.CartItems, cartItem) // 将购物项添加到当前cart的切片中
			dao.AddCartItem(cartItem)                         // 将新创建的购物项添加到数据库中
		}
		dao.UpdateCart(cart) // 不管之前购物车中是否有当前购物项，都需要更新购物车中的商品总数量和总金额
	} else { // 当前用户没有购物车，创建购物车添加到数据库
		cartID := util.CreateUUID()
		cart := &model.Cart{ // 1.Create cart
			CartID: cartID, // cartID是通过UUID生成
			UserID: userID,
		}
		var cartItems []*model.CartItem // 声明一个CartItem类型的切片
		cartItem := &model.CartItem{    // 2.创建购物车中的购物项
			Item:   item,
			Count:  1,
			CartID: cartID,
		}
		cartItems = append(cartItems, cartItem)
		cart.CartItems = cartItems // 3.将切片设置到cart中
		dao.AddCart(cart)          // 4.将购物车cart保存到数据库中
	}
	GetItems(w, r)
}

func GetCartInfo(w http.ResponseWriter, r *http.Request) {
	t := template.Must(template.ParseFiles("view/page/cart/cart.html"))
	t.Execute(w, "")
}
